#DSC 简介
Desired State Configuration(DSC)是 PowerShell 生态中的配置管理框架。它用声明的方式描述系统“应该处于什么状态”,再由执行引擎把系统调整到该状态。
#什么是 DSC
DSC 的核心是 配置(Configuration):一段描述目标状态的声明式代码。用户不必编写“先检查、再创建、失败重试”的步骤,只需要描述期望结果,例如:
- 某个文件必须存在,且内容为指定值
- 某个服务必须处于运行状态
- 某个功能必须安装
DSC 会读取当前状态并与目标状态比较,只对不一致的部分进行修正。
#声明式配置
声明式配置关注 结果,而不是 过程:
Configuration WebServer {
Node localhost {
WindowsFeature IIS {
Name = 'Web-Server'
Ensure = 'Present'
}
}
}
上面代码只表达“IIS 应该存在”,至于是否需要安装、跳过还是修复,由 DSC 判断。
#与命令式脚本的区别
| 对比项 | 声明式(DSC) | 命令式脚本 |
|---|---|---|
| 描述对象 | 期望的最终状态 | 每一步操作 |
| 是否幂等 | 天然幂等 | 需要自行保证 |
| 状态检查 | 引擎自动比较 | 手动编写判断 |
| 适用场景 | 服务器配置、批量部署 | 临时任务、流程编排 |
命令式脚本也能实现幂等,但需要为每个操作编写 Test-Path、Get-Service 之类的判断;DSC 把这些检查内建到资源中。
#Windows PowerShell DSC 与 PowerShell 7
DSC 最早随 Windows PowerShell 4.0 提供,常称为 DSC v1:
- 内置于 Windows PowerShell,包含
PSDesiredStateConfiguration模块 - 使用
Configuration块编写,编译为 MOF 文件 - 由本地配置管理器(LCM)应用配置
- 资源以 PowerShell 模块形式分发
PowerShell 7 是跨平台版本,默认 不包含 完整的 DSC v1 支持。微软随后推出了独立的 DSC v3(dsc 命令行工具),支持 Windows、Linux 和 macOS,配置格式也从 MOF 转向 YAML/JSON。
#跨平台注意事项
- DSC v1 的资源大量依赖 Windows 组件(注册表、Windows 功能、WMI),不能直接在 Linux 上运行。
- DSC v3 使用独立的
dsc可执行文件,通过资源清单发现资源,与 PowerShell 版本解耦。 - 跨平台部署时,优先使用文件、脚本、包管理等通用资源,避免平台专有资源。
- 若目标环境无法使用 DSC,可以用幂等的 PowerShell 脚本实现同样的效果。